package com.ruoyi.jacfile.itext;

import com.lowagie.text.*;
import com.lowagie.text.Font;
import com.lowagie.text.Image;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.*;
import com.ruoyi.jacfile.util.BarCodeUtil;
import com.ruoyi.jacfile.util.QRCodeUtil;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
import java.util.List;
import java.util.Map;
import java.util.UUID;

public class ITextDemo {

    public static void main(String[] args) {
        String PDF_PATH = "F:\\";
        String filename = UUID.randomUUID().toString() + "_" + ".pdf";
        String fullFileName = PDF_PATH + filename;

        Rectangle rect = new Rectangle(842.0F, 595.0F);//设置页面大小,在源码中有PageSize.A4  = new Rectangle(595.0F, 842.0F)
//        Document document = new Document(rect, 80, 80, 90, 25); //设置成A4纸大小,内容距左右上下的距离
        Document document = new Document(rect, 10, 10, 10, 10); //设置成A4纸大小,内容距左右上下的距离

        //String fullFileName = PDF_PATH + fileName+".pdf"; //文件全路径
        try {
            PdfWriter.getInstance(document, new FileOutputStream(fullFileName));

            // 插入一个段落
            //设置中文字体
//            BaseFont baseFontChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            BaseFont baseFontChinese = BaseFont.createFont("C:\\Windows\\Fonts\\simkai.ttf", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
            //1.标题字体
            Font headFont =  new Font(baseFontChinese , 20 , Font.BOLD);;
            //2.正文字体
            Font contentFontSecond =  new  Font(baseFontChinese , 12 , Font.NORMAL);

            //设置页脚
            HeaderFooter footer=new HeaderFooter(new Phrase("供应商送货人：                   物料交接人：                   专业厂交接人：             ",contentFontSecond),false);
            /**
             * 0是靠左
             * 1是居中
             * 2是居右
             */
//            footer.setBorderColor(Color.black);
            footer.setBorder(0);
//            footer.setAlignment(2);//设置右对齐
            document.setFooter(footer);


            document.open();//打开PDF文件进行编辑
            String codes = "this is a test message";
//
            //二维码生成
            BufferedImage encode = QRCodeUtil.encode(codes, null, false);
            Image instance = Image.getInstance(encode, Color.BLACK);
            instance.scaleAbsolute(100,100);

            //条形码生成
            BufferedImage barcodes = BarCodeUtil.insertWords(BarCodeUtil.getBarCode(codes), codes);
            Image barcode128 = Image.getInstance(barcodes,Color.BLACK);
            barcode128.setAbsolutePosition(500,500);

            document.add(instance);
            document.add(barcode128);


            //设置标题
            Paragraph head1 = new Paragraph("轻卡直供送货单", headFont);
            head1.setAlignment(1);//设置段落居中
            head1.setSpacingAfter(50);
            document.add(head1);

            //使用表格布局
            PdfPTable baseInfoTable = new PdfPTable(6); //设置表格有多少列
            int width[] = {8,25,12,25,12,25};//设置每列宽度比例
            baseInfoTable.setWidths(width);
            baseInfoTable.setWidthPercentage(100);//占页面宽度比例
            //设置表格中单元格的属性,所有单元格都可以使用
            PdfPCell pdfPCell = new PdfPCell();//创建一个单元格
            //设置字体水平居中
            pdfPCell.setHorizontalAlignment(PdfPCell.LEFT);//设置水平对齐
            //设置字体垂直对齐居中
            pdfPCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
            pdfPCell.setBorder(0);

            pdfPCell.setPhrase(new Phrase("送货单号:" , contentFontSecond));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase("SH5574445", contentFontSecond));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase("计划日期:" , contentFontSecond));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase("2020-06-17", contentFontSecond));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase("打印日期:", contentFontSecond));//设置空白列
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase("2020-06-17", contentFontSecond));//设置空白列
            baseInfoTable.addCell(pdfPCell);
            //第二行
//            pdfPCell.setBorder(Rectangle.BOTTOM);//设置底部颜色，实现一条横线的效果
//            pdfPCell.setBorderColor(Color.BLACK);
            pdfPCell.setPhrase(new Phrase("工作中心:" , contentFontSecond));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase("JF01H1", contentFontSecond));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase("" ));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase(""));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase("接收仓库：", contentFontSecond));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase("JF0101", contentFontSecond));
            baseInfoTable.addCell(pdfPCell);
            //第三行
            pdfPCell.setPhrase(new Phrase("仓库地址:" , contentFontSecond));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase(""));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase("业务伙伴代码:" , contentFontSecond));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase("1144", contentFontSecond));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase("业务伙伴名称:", contentFontSecond));
            baseInfoTable.addCell(pdfPCell);
            pdfPCell.setPhrase(new Phrase("江苏振世达新能汽车有限公司", contentFontSecond));
            baseInfoTable.addCell(pdfPCell);
            baseInfoTable.setSpacingAfter(30);//设置间距

            PdfPTable baseInfoTable1 = new PdfPTable(12);
            int width1[] = {4,8,8,4,6,6,6,4,4,4,4,4};//设置每列宽度比例
            baseInfoTable1.setWidths(width1);
            baseInfoTable1.setWidthPercentage(100);//占页面宽度比例
            //设置表格中单元格的属性,所有单元格都可以使用
            PdfPCell pdfPCell1 = new PdfPCell();//创建一个单元格
            //设置字体水平居中
            pdfPCell1.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);//设置水平居中
            //设置字体垂直对齐居中
            pdfPCell1.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
//            pdfPCell1.setBorder(Rectangle.BOTTOM);
            pdfPCell1.setBorderWidth(1f);
            pdfPCell1.setBorderColor(Color.BLACK);

            pdfPCell1.setPhrase(new Phrase("序号" , contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("物料代码", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("物料名称" , contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("单位", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("计划数", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("实发数", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("实收数" , contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("工位", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("产线", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("来源", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("器具", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("备注", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);

            pdfPCell1.setPhrase(new Phrase("1" , contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("5600012D0S", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("后围横梁" , contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("pcs", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("1", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("1", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("1" , contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase(""));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("" ));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("JF01H1", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase("JF01H1", contentFontSecond));
            baseInfoTable1.addCell(pdfPCell1);
            pdfPCell1.setPhrase(new Phrase(""));
            baseInfoTable1.addCell(pdfPCell1);


            document.add(baseInfoTable);
            document.add(baseInfoTable1);


        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            document.close();
        }
    }


//    public static String createPreservationListPDF(String fileName, Map<String, String> baseInfo, String[] tableHeads, List<Float> tableDataList) throws Exception{
//        //Document doc = new Document(PageSize.B5);
////        String sysdate = GetSysdate();//获取系统当前时间
//        String fullFileName = PDF_PATH ;//文件全路径
//
//        Rectangle rect = new Rectangle(842.0F, 595.0F);//设置页面大小,在源码中有PageSize.A4  = new Rectangle(595.0F, 842.0F)
//        Document document = new Document(rect, 80, 80, 90, 25); //设置成A4纸大小,内容距左右上下的距离
//
//        //String fullFileName = PDF_PATH + fileName+".pdf"; //文件全路径
//        try {
//            PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(fullFileName));
//
//            // 插入一个段落
//            //设置中文字体
//            BaseFont baseFontChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
//            //1.标题字体
//            Font headFont =  new Font(baseFontChinese , 16 , Font.BOLD);;
//            //2.正文字体
//            Font contentFontSecond =  new  Font(baseFontChinese , 10 , Font.NORMAL);
//
//            //设置页脚
//            HeaderFooter footer=new HeaderFooter(new Phrase("保险公司盖章：                                               \n\n   ",contentFontSecond),false);
//            /**
//             * 0是靠左
//             * 1是居中
//             * 2是居右
//             */
//            footer.setBorderColor(Color.black);
//            footer.setBorder(Rectangle.TOP);
//            footer.setAlignment(2);//设置右对齐
//            document.setFooter(footer);
//
//
//            document.open();//打开PDF文件进行编辑
//            //设置标题
//            Paragraph head1 = new Paragraph("团险保全明细", headFont);
//            head1.setAlignment(1);//设置段落居中
//            head1.setSpacingAfter(30);
//            document.add(head1);
//
//            //使用表格布局
//            PdfPTable baseInfoTable = new PdfPTable(6); //设置表格有多少列
//            int width[] = {6,14,8,50,8,14};//设置每列宽度比例
//            baseInfoTable.setWidths(width);
//            baseInfoTable.setWidthPercentage(100);//占页面宽度比例
//            //设置表格中单元格的属性,所有单元格都可以使用
//            PdfPCell pdfPCell = new PdfPCell();//创建一个单元格
//            //设置字体水平居中
//            pdfPCell.setHorizontalAlignment(PdfPCell.LEFT);//设置水平对齐
//            //设置字体垂直对齐居中
//            pdfPCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
//            pdfPCell.setBorder(0);
//
//            pdfPCell.setPhrase(new Phrase("保单号:" , contentFontSecond));
//            baseInfoTable.addCell(pdfPCell);
//            pdfPCell.setPhrase(new Phrase(baseInfo.get("policyCode"), contentFontSecond));
//            baseInfoTable.addCell(pdfPCell);
//            pdfPCell.setPhrase(new Phrase("投保单位:" , contentFontSecond));
//            baseInfoTable.addCell(pdfPCell);
//            pdfPCell.setPhrase(new Phrase(baseInfo.get("companyName"), contentFontSecond));
//            baseInfoTable.addCell(pdfPCell);
//            pdfPCell.setPhrase(new Phrase(""));//设置空白列
//            baseInfoTable.addCell(pdfPCell);
//            pdfPCell.setPhrase(new Phrase(""));//设置空白列
//            baseInfoTable.addCell(pdfPCell);
//            //第二行
//            pdfPCell.setBorder(Rectangle.BOTTOM);//设置底部颜色，实现一条横线的效果
//            pdfPCell.setBorderColor(Color.BLACK);
//            pdfPCell.setPhrase(new Phrase("批单号:" , contentFontSecond));
//            baseInfoTable.addCell(pdfPCell);
//            pdfPCell.setPhrase(new Phrase(baseInfo.get("policyChangeId"), contentFontSecond));
//            baseInfoTable.addCell(pdfPCell);
//            pdfPCell.setPhrase(new Phrase("保全单位:" , contentFontSecond));
//            baseInfoTable.addCell(pdfPCell);
//            pdfPCell.setPhrase(new Phrase("团单短险批次增加被保人", contentFontSecond));
//            baseInfoTable.addCell(pdfPCell);
//            pdfPCell.setPhrase(new Phrase("生效日期:",contentFontSecond));
//            baseInfoTable.addCell(pdfPCell);
//            pdfPCell.setPhrase(new Phrase(baseInfo.get("effectiveDate"), contentFontSecond));
//            baseInfoTable.addCell(pdfPCell);
//            baseInfoTable.setSpacingAfter(30);//设置间距
//            document.add(baseInfoTable);
//
//
//
//
////            //清单
////            PdfPTable presListTable = new PdfPTable(tableHeads.length); //设置表格有多少列
////            int presWidth[] = {16,16,17,17,17,17};//设置每列宽度比例
////            presListTable.setWidths(presWidth);
////            presListTable.setWidthPercentage(100);//占页面宽度比例
////            //设置表格中单元格的属性,所有单元格都可以使用
////            //PdfPCell pdfPCell = new PdfPCell();//创建一个单元格
////            //设置字体水平居中
////            pdfPCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);//设置水平对齐
////            //设置字体垂直对齐居中
////            pdfPCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
////            pdfPCell.setBorder(0);
////            //保险方案内容：
////            for(String head : tableHeads){
////                pdfPCell.setPhrase(new Phrase(head , contentFontSecond));
////                presListTable.addCell(pdfPCell);
////            }
////            presListTable.completeRow();
////            for(Float preservation : tableDataList){
////                pdfPCell.setPhrase(new Phrase(preservation.getInsuredName(), contentFontSecond));
////                presListTable.addCell(pdfPCell);
////                pdfPCell.setPhrase(new Phrase(preservation.getInsuredIdcard(), contentFontSecond));
////                presListTable.addCell(pdfPCell);
////                pdfPCell.setPhrase(new Phrase(preservation.getJobLevel(), contentFontSecond));
////                presListTable.addCell(pdfPCell);
////                pdfPCell.setPhrase(new Phrase(preservation.getPackageName(), contentFontSecond));
////                presListTable.addCell(pdfPCell);
////                pdfPCell.setPhrase(new Phrase(preservation.getPolicyFee(), contentFontSecond));
////                presListTable.addCell(pdfPCell);
////                pdfPCell.setPhrase(new Phrase(preservation.getEffectiveDate(), contentFontSecond));
////                presListTable.addCell(pdfPCell);
////                presListTable.completeRow();//完成行
////
////            }
////            document.add(presListTable);
//
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            document.close();
//        }
//        return fullFileName;
//    }
//
//
//    public static String GetSysdate() {
//        java.text.DateFormat df = new java.text.SimpleDateFormat("yyyyMMddhhmmssSSS");
//        java.util.Date date = new java.util.Date();
//        String sysdate = df.format(date);
//        return sysdate;
//    }
//    // 获取pdf模板的全路径
//    public static String GetPdfPath(String fileName) {
//        String pdfpath = TEMPLATE_PDF_PATH + "\\"+ fileName + ".pdf";
//        return pdfpath;
//    }

}
